package com.martin.lib_base.impl

import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Observer
import com.martin.lib_base.ktx.loge
import com.martin.lib_base.ktx.toJson

/**
 * @author：Houge
 * @date：2021/12/14 11:36
 * @desc: 事件总线
 * 事件总是粘性的, 也就是说, 当你订阅事件的时候, 如果事件已经发生了, 那么你也能收到事件
 * 事件总线的实现原理是: 通过一个Map来存放所有的LiveData, 然后通过key来获取对应的LiveData, 然后通过LiveData来实现事件的订阅和发送
 * 推荐使用FlowBus,可以自主选择事件粘性与否
 */
object LiveDataBus {

    // 用来存放所有的LiveData
    private val bus: MutableMap<String, MutableLiveData<Any>> = HashMap()

    /**
     * 根据Key获取事件总线
     */
    fun <T> with(key: String, type: Class<T>?): MutableLiveData<T> {
        if (!bus.containsKey(key)) {
            bus[key] = MutableLiveData()
        }
        return bus[key] as MutableLiveData<T>
    }

    /**
     * 根据Key获取事件总线
     */
    fun with(key: String): MutableLiveData<Any> {
        return with(key, Any::class.java)
    }

}